// 这里实现的是计数器sem
#pragma once
#include <iostream>
#include <semaphore.h>
using namespace std;
namespace SemModule {
    const int N = 1; // 初始状态计数器的值：1表示的是二元信号量，n表示的是线程并发
    class Sem {
        public:
            Sem(unsigned int sem_value = N) {
                sem_init(&_sem, 0, sem_value); // 0表示的是线程之间共享
            }
            void P() { 
                int n = sem_wait(&_sem);
                (void)n;
            }
            void V() {
                int n = sem_post(&_sem);
                (void)n;
            }
            ~Sem() {
                sem_destroy(&_sem);
            }
        private:
            sem_t _sem;
    };
}